/*
 * @lc app=leetcode.cn id=283 lang=java
 *
 * [283] 移动零
 *
 * https://leetcode-cn.com/problems/move-zeroes/description/
 *
 * algorithms
 * Easy (52.58%)
 * Total Accepted:    34.5K
 * Total Submissions: 65.5K
 * Testcase Example:  '[0,1,0,3,12]'
 *
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * 
 * 示例:
 * 
 * 输入: [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 * 
 * 说明:
 * 
 * 
 * 必须在原数组上操作，不能拷贝额外的数组。
 * 尽量减少操作次数。
 * 
 * 
 */
class Solution {
    public void moveZeroes(int[] nums) {
        int t = -1;
        for (int p = 0; p < nums.length; ++p) {
            int x = nums[p];
            if (x == 0 && t == -1) {
                t = p;
            } else if (x != 0 && t != -1) {
                nums[t++] = nums[p];
            }
        }
        if (t != -1) {
            for (int i=t; i<nums.length; nums[i++] = 0);
        }
    }
}

